package two.chapter_1.c1_1;

public class MathUtil {


    /**
     * 牛顿迭代公式
     * 参考百度百科    Xn+1=Xn-f(Xn)/f'(Xn)
     *
     * 切c(c>=0)的算术平方根就是求f(x)=x^2-c的整根，得牛顿迭代公式：Xn+1=(1/2)*(Xn+c/Xn)
     *
     * @param N
     * @return
     */
    public static double sqrt(double N){
        if (N<0){
            return Double.NaN;
        }else {
            double err=1e-15;  //误差：err=1*10^-15
            double x=N;
            double y=(x+N/x)/2;
            while (abs(x-y)>err){
                x=y;
                y=(x+N/x)/2;
            }

            return x;
        }
    }
    public static double abs(double N){
        if (N<0){
            return -N;
        }
        return N;
    }

    /* 定义：质数大于等于2 不能被它本身和1以外的数整除
     * 判断方法： 在一般领域，对正整数n，如果用2到n的平方根之间的所有整数去除，均无法整除，则n为质数。
     */
    public static boolean isPrime(int N){
        if (N<2){
            return false;
        }
        int sqrtN= (int) Math.sqrt(N);
        for (int i=2;i<=sqrtN;i++){
            if (N%i==0){
                return false;
            }
        }
        return true;
    }

}
